Pre-Authorization
Verifies and locks funds on the customer’s credit card. The funds are locked for a specified amount of time based on the card issuer.
To retrieve the funds that have been locked by a Pre-Authorization transaction so that they may be settled in the merchant’s account, a Completion transaction must be performed.
Things to consider:
- If a Pre-Authorization transaction is not followed by a Completion transaction, it must be reversed via a Completion transaction for 0.00.
- A Pre-Authorization transaction may only be "completed" once.
package Canada;
import JavaAPI.*;
public class TestCanadaPreauth
{
public static void main(String[] args)
{
String store_id = "store5";
String api_token = "yesguy";
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String amount = "5.00";
String pan = "4242424242424242";
String expdate = "1902";
String crypt = "7";
String processing_country_code = "CA";
boolean status_check = false;
PreAuth preauth = new PreAuth();
preauth.setOrderId(order_id);
preauth.setAmount(amount);
preauth.setPan(pan);
preauth.setExpdate(expdate);
preauth.setCryptType(crypt);
//preauth.setWalletIndicator(""); //Refer documentation for possible values
//Optional - Set for Multi-Currency only
//setAmount must be 0.00 when using multi-currency
//preauth.setMCPAmount("500"); //penny value amount 1.25 = 125
//preauth.setMCPCurrencyCode("840"); //ISO-4217 country currency number
//optional - Credential on File details
CofInfo cof = new CofInfo();
cof.setPaymentIndicator("U");
cof.setPaymentInformation("2");
cof.setIssuerId("139X3130ASCXAS9");
preauth.setCofInfo(cof);
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(preauth);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("ISO = " + receipt.getISO());
System.out.println("BankTotals = " + receipt.getBankTotals());
System.out.println("Message = " + receipt.getMessage());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("Ticket = " + receipt.getTicket());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("IsVisaDebit = " + receipt.getIsVisaDebit());
//System.out.println("StatusCode = " + receipt.getStatusCode());
//System.out.println("StatusMessage = " + receipt.getStatusMessage());
System.out.println("MCPAmount = " + receipt.getMCPAmount());
System.out.println("MCPCurrencyCode = " + receipt.getMCPCurrencyCode());
System.out.println("IssuerId = " + receipt.getIssuerId());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Pre-Authorization - Transaction Values
PreAuth preauth = new PreAuth();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(preauth);
Pre-Authorization object mandatory values
Value
|
Type
|
Limits
|
Set method
|
Description
|
Order ID
|
String
|
50-character alphanumeric
|
preauth.setOrderId(order_id);
|
Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.
For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.
The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.
A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.
If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.
|
Amount
|
String
|
10-character decimal
|
preauth.setAmount(amount);
|
Transaction amount This must contain at least 3 digits, two of which are penny values.
The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed.
|
Credit card number
|
String
|
20-character numeric
|
preauth.setPan(pan);
|
Most credit card numbers today are 16 digits, but some 13-digit numbers are still accepted by some issuers. This field has been intentionally expanded to 20 digits in consideration for future expansion and potential support of private label card ranges.
|
Expiry date
|
String
|
4-character alphanumeric
YYMM format.
|
preauth.setExpdate(expdate);
|
Submit in YYMM format.
Note: This is the reverse of the date displayed on the physical card, which is MMYY.
|
E-Commerce indicator
|
String
|
1-character alphanumeric
|
preauth.setCryptType(crypt);
|
Describes the category of e-commerce transaction being processed. Allowable values are:
- 1 - Mail Order / Telephone Order—Single
- 2 - Mail Order / Telephone Order—Recurring
- 3 - Mail Order / Telephone Order—Instalment
- 4 - Mail Order / Telephone Order—Unknown classification
- 5 - Authenticated e-commerce transaction (VBV)
- 6 - Non-authenticated e-commerce transaction (VBV)
- 7 - SSL-enabled merchant
In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:
if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7
|
Pre-Authorization object optional values
Value
|
Type
|
Limits
|
Set method
|
Description
|
Dynamic descriptor |
String |
20-character alphanumeric |
preauth.setDynamicDescriptor(dynamic_descriptor); |
Merchant defined description sent on a per-transaction basis that will appear on the credit card statement. Dependent on the card Issuer, the statement will typically show the dynamic descriptor appended to the merchant's existing business name separated by the "/" character. Please note that the combined length of the merchant's business name, forward slash "/" character, and the dynamic descriptor may not exceed 22 characters.
-Example-
Existing Business Name: ABC Painting
Dynamic Descriptor: Booking 12345
Cardholder Statement Displays: ABC Painting/Booking 1
For Pre-Authorization transactions: the value in the dynamic descriptor field will only be carried over to a Pre-Authorization Completion when executing the latter via the Merchant Resource Center; otherwise, the value for dynamic descriptor must be sent again in the Pre-Authorization Completion.
|
Status Check
|
Boolean
|
true/false
|
mpgReq.setStatusCheck(status_check);
|
Status Check is a connection object value that allows merchants to verify whether a previously sent transaction was processed successfully. To submit a Status Check request, resend the original transaction with all the same parameter values, but set the status check value to either true or false. Once set to “true”, the gateway will check the status of a transaction that has an order_id that matches the one passed.
If the transaction is found, the gateway will respond with the specifics of that transaction.
If the transaction is not found, the gateway will respond with a not found message.
Once it is set to “false”, the transaction will process as a new transaction.
Things to consider:
The Status Check request should only be used once and immediately (within 2 minutes) after the last transaction that had failed.
Do not resend the Status Check request if it has timed out. Additional investigation is required.
|
Wallet Indicator
|
String
|
3-character alphanumeric
|
preauth.setWalletIndicator(wallet_indicator);
|
Available to Canada integrations only. This field is applicable to Visa Checkout and MasterCard MasterPass transactions whereby the merchant has integrated directly to the Visa/MC wallet to retrieve the card data and is now submitting it for processing. This is a mandatory field for these Visa Checkout and MasterCard MasterPass transactions.
Field is a case sensitive. Possible value:
- APP = Apple Pay In-app
- APW = Apple Pay On the Web
- GPP = Google Pay In-app
- GPW = Google Pay On the Web
- MMP = MasterCard MasterPass
- VCO = Visa Checkout
|
Customer Information
|
Object
|
N/A |
preauth.setCustInfo(customer); |
Refer below for further breakdown and definition. |
AVS
|
Object |
N/A |
preauth.setAvsInfo(avsCheck);
|
Refer below for further breakdown and definition. |
CVD
|
Object
|
N/A |
preauth.setCvdInfo(cvdCheck);
|
Refer below for further breakdown and definition. |
Customer ID
|
String |
50-character alphanumeric
|
preauth.setCustId(cust_id);
|
This can be used for policy number, membership number, student ID, invoice number.
This field is searchable from the Moneris Merchant Resource Centre.
|
COF Info
|
Object
|
|
preauth.setCofInfo(cof);
|
Refer to Pre-authorization with Credential on File
|
purchase.setOrderId(order_id); |
Pre-Authorization with Customer Information
The Customer Information object is an optional add-on to a number of transactions. The Customer Information object offers a number of fields to be submitted as part of the financial transaction, and stored by Moneris. These details may be viewed in the future in the Merchant Resource Center.
In addition to instantiating a transaction object and a connection object (as you would for a normal transaction), you must instantiate a CustInfo object. Any transaction that supports CustInfo has a setCustInfo method. This is used to write the customer information to the transaction object.
The Customer Information object holds three types of information:
- Miscellaneous customer information properties
- Billing/Shipping information
- Item information
Things to consider:
- If you send characters that are not included in the allowed list, these extra transaction details may not be stored.
- All fields are alphanumeric and allow the following characters: a-z A-Z 0-9 _ - : . @ $ = /
- All French accents should be encoded as HTML entities, such as é
- The data sent in Billing and Shipping Address fields will not be used for any address verification.
package Canada;
import java.util.*;
import JavaAPI.*;
public class TestCanadaPreauthCustInfo
{
public static void main(String[] args)
{
String store_id = "store5";
String api_token = "yesguy";
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String amount = "1.00";
String pan = "4242424242424242";
String expdate = "1901"; //YYMM format
String crypt = "7";
String processing_country_code = "CA";
boolean status_check = false;
/********************* Billing/Shipping Variables ****************************/
String first_name = "Bob";
String last_name = "Smith";
String company_name = "ProLine Inc.";
String address = "623 Bears Ave";
String city = "Chicago";
String province = "Illinois";
String postal_code = "M1M2M1";
String country = "Canada";
String phone = "777-999-7777";
String fax = "777-999-7778";
String tax1 = "10.00";
String tax2 = "5.78";
String tax3 = "4.56";
String shipping_cost = "10.00";
/********************* Order Line Item Variables *****************************/
String[] item_description = new String[] { "Chicago Bears Helmet", "Soldier Field Poster" };
String[] item_quantity = new String[] { "1", "1" };
String[] item_product_code = new String[] { "CB3450", "SF998S" };
String[] item_extended_amount = new String[] { "150.00", "19.79" };
/*****************************************************************************/
/* */
/* Customer Information Option 1 */
/* */
/*****************************************************************************/
/********************** Customer Information Object **************************/
CustInfo customer = new CustInfo();
/********************** Set Customer Billing Information **********************/
customer.setBilling(first_name, last_name, company_name, address, city,
province, postal_code, country, phone, fax, tax1, tax2,
tax3, shipping_cost);
/******************** Set Customer Shipping Information ***********************/
customer.setShipping(first_name, last_name, company_name, address, city,
province, postal_code, country, phone, fax, tax1, tax2,
tax3, shipping_cost);
/***************************** Order Line Items ******************************/
customer.setItem(item_description[0], item_quantity[0],
item_product_code[0], item_extended_amount[0]);
customer.setItem(item_description[1], item_quantity[1],
item_product_code[1], item_extended_amount[1]);
/*****************************************************************************/
/* */
/* Customer Information Option 2 */
/* */
/*****************************************************************************/
/********************** Customer Information Object **************************/
CustInfo customer2 = new CustInfo();
/******************************* Billing Hashtable ***************************/
Hashtable<String, String> b = new Hashtable<String, String>(); //billing hashtable
b.put("first_name", first_name);
b.put("last_name", last_name);
b.put("company_name", company_name);
b.put("address", address);
b.put("city", city);
b.put("province", province);
b.put("postal_code", postal_code);
b.put("country", country);
b.put("phone", phone);
b.put("fax", fax);
b.put("tax1", tax1); //federal tax
b.put("tax2", tax2); //prov tax
b.put("tax3", tax3); //luxury tax
b.put("shipping_cost", shipping_cost); //shipping cost
customer2.setBilling(b);
/****************************** Shipping Hashtable ***************************/
Hashtable<String, String> s = new Hashtable<String, String>(); //shipping hashtable
s.put("first_name", first_name);
s.put("last_name", last_name);
s.put("company_name", company_name);
s.put("address", address);
s.put("city", city);
s.put("province", province);
s.put("postal_code", postal_code);
s.put("country", country);
s.put("phone", phone);
s.put("fax", fax);
s.put("tax1", tax1); //federal tax
s.put("tax2", tax2); //prov tax
s.put("tax3", tax3); //luxury tax
s.put("shipping_cost", shipping_cost); //shipping cost
customer2.setShipping(s);
/************************* Order Line Item1 Hashtable ************************/
Hashtable<String, String> i1 = new Hashtable<String, String>(); //item hashtable #1
i1.put("name", item_description[0]);
i1.put("quantity", item_quantity[0]);
i1.put("product_code", item_product_code[0]);
i1.put("extended_amount", item_extended_amount[0]);
customer2.setItem(i1);
/************************* Order Line Item2 Hashtable **************************/
Hashtable<String, String> i2 = new Hashtable<String, String>(); //item hashtable #2
i2.put("name", "item2's name");
i2.put("quantity", "7");
i2.put("product_code", "item2's product code");
i2.put("extended_amount", "5.01");
customer2.setItem(i2);
/*************** Miscellaneous Customer Information Methods *******************/
customer.setEmail("nick@widget.com");
customer.setInstructions("Make it fast!");
/********************** Transactional Request Object **************************/
PreAuth preauth = new PreAuth();
preauth.setOrderId(order_id);
preauth.setAmount(amount);
preauth.setPan(pan);
preauth.setExpdate(expdate);
preauth.setCryptType(crypt);
preauth.setCustInfo(customer);
/**************************** Https Post Request ***************************/
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(preauth);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
/******************************* Receipt ***********************************/
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("ISO = " + receipt.getISO());
System.out.println("BankTotals = " + receipt.getBankTotals());
System.out.println("Message = " + receipt.getMessage());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("Ticket = " + receipt.getTicket());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("IsVisaDebit = " + receipt.getIsVisaDebit());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Pre-Authorization - Transaction Values
PreAuth preauth = new PreAuth();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(preauth);
Pre-Authorization object mandatory values
Value |
Type |
Limits |
Set method |
Description |
Order ID |
String |
50-character alphanumeric |
preauth.setOrderId(order_id); |
Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.
For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.
The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.
A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.
If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.
|
Amount |
String |
10-character decimal |
preauth.setAmount(amount); |
Transaction amount This must contain at least 3 digits, two of which are penny values. The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed. |
Credit card number |
String |
20-character numeric |
preauth.setPan(pan); |
Most credit card numbers today are 16 digits, but some 13-digit numbers are still accepted by some issuers. This field has been intentionally expanded to 20 digits in consideration for future expansion and potential support of private label card ranges. |
Expiry date |
String |
4-character alphanumeric
YYMM format. |
preauth.setExpdate(expdate); |
Submit in YYMM format. Note: This is the reverse of the date displayed on the physical card, which is MMYY. |
E-Commerce indicator |
String |
1-character alphanumeric |
preauth.setCryptType(crypt); |
Describes the category of e-commerce transaction being processed. Allowable values are:
- 1 - Mail Order / Telephone Order—Single
- 2 - Mail Order / Telephone Order—Recurring
- 3 - Mail Order / Telephone Order—Instalment
- 4 - Mail Order / Telephone Order—Unknown classification
- 5 - Authenticated e-commerce transaction (VBV)
- 6 - Non-authenticated e-commerce transaction (VBV)
- 7 - SSL-enabled merchant
In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:
if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7
|
Pre-Authorization object optional values
Value |
Type |
Limits |
Set method |
Description |
Dynamic descriptor |
String |
20-character alphanumeric |
preauth.setDynamicDescriptor(dynamic_descriptor); |
Merchant defined description sent on a per-transaction basis that will appear on the credit card statement. Dependent on the card Issuer, the statement will typically show the dynamic descriptor appended to the merchant's existing business name separated by the "/" character. Please note that the combined length of the merchant's business name, forward slash "/" character, and the dynamic descriptor may not exceed 22 characters.
-Example-
Existing Business Name: ABC Painting
Dynamic Descriptor: Booking 12345
Cardholder Statement Displays: ABC Painting/Booking 1
For Pre-Authorization transactions: the value in the dynamic descriptor field will only be carried over to a Pre-Authorization Completion when executing the latter via the Merchant Resource Center; otherwise, the value for dynamic descriptor must be sent again in the Pre-Authorization Completion.
|
Status Check |
Boolean |
true/false |
mpgReq.setStatusCheck(status_check); |
Status Check is a connection object value that allows merchants to verify whether a previously sent transaction was processed successfully. To submit a Status Check request, resend the original transaction with all the same parameter values, but set the status check value to either true or false. Once set to “true”, the gateway will check the status of a transaction that has an order_id that matches the one passed. If the transaction is found, the gateway will respond with the specifics of that transaction. If the transaction is not found, the gateway will respond with a not found message. Once it is set to “false”, the transaction will process as a new transaction. Things to consider: The Status Check request should only be used once and immediately (within 2 minutes) after the last transaction that had failed. Do not resend the Status Check request if it has timed out. Additional investigation is required. |
Wallet Indicator
|
String
|
3-character alphanumeric
|
preauth.setWalletIndicator(wallet_indicator);
|
Available to Canada integrations only. This field is applicable to Visa Checkout and MasterCard MasterPass transactions whereby the merchant has integrated directly to the Visa/MC wallet to retrieve the card data and is now submitting it for processing. This is a mandatory field for these Visa Checkout and MasterCard MasterPass transactions.
Field is a case sensitive. Possible value:
- APP = Apple Pay In-app
- APW = Apple Pay On the Web
- GPP = Google Pay In-app
- GPW = Google Pay On the Web
- MMP = MasterCard MasterPass
- VCO = Visa Checkout
|
Customer Information |
Object |
NA |
preauth.setCustInfo(customer); |
Refer below for further breakdown and definition. |
AVS |
|
N/A |
preauth.setAvsInfo(avsCheck); |
Refer below for further breakdown and definition. |
CVD |
Object |
NA |
preauth.setCvdInfo(cvdCheck); |
Refer below for further breakdown and definition. |
Customer ID |
String |
50-character alphanumeric |
preauth.setCustId(cust_id); |
This can be used for policy number, membership number, student ID, invoice number.
This field is searchable from the Moneris Merchant Resource Centre. |
COF Info
|
Object
|
|
cof.setPaymentIndicator(PaymentIndicator);
cof.setPaymentInformation(PaymentInformation);
cof.setIssuerId(IssuerID);
|
Refer to Pre-authorization with Credential on File
|
CustInfo object mandatory properties
Setting Billing & Shipping using Set Methods
The billing information and the shipping information for a given CustInfo object are written by using the customer.setBilling() and customer.setShipping() methods respectively:
customer.setBilling(first_name, last_name, company_name, address, city, province, postal_code, country, phone, fax, tax1, tax2, tax3, shipping_cost);
customer.setShipping(first_name, last_name, company_name, address, city, province, postal_code, country, phone, fax, tax1, tax2, tax3, shipping_cost);
Both of these methods have the same set of mandatory arguments.
Setting Billing & Shipping using Hash Tables
Writing billing or shipping information using hash tables is done as follows:
- Instantiate a CustInfo object.
- Instantiate a Hashtable object. (The sample code uses a different hash table for billing and shipping for clarity purposes. However, the skillful developer can re-use the same one.)
- Build the hashtable using put methods with the hash table keys in the table below.
- Call the CustInfo object's setBilling()/setShipping() method to pass the hashtable information to the CustInfo object
- Call the transaction object's setCustInfo() method to write the CustInfo object (with the billing/shipping information to the transaction object.
Billing & Shipping mandatory values
Setting Items using Set Methods
All the item information in the table below is written to the CustInfo object in one instruction for a given item. Multiples items may be set. Such as:
customer.setItem(item_description, item_quantity, item_product_code, item_extended_amount);
Setting Items using Hash Tables
Writing item information using hash tables is done as follows:
- Instantiate a CustInfo object.
- Instantiate a Hashtable object. (The sample code uses a different hash table for each item for clarity purposes. However, the skillful developer can re-use the same one.)
- Build the hashtable using put methods with the hash table keys in the table below.
- Call the CustInfo object's setItem() method to pass the hashtable information to the CustInfo object
- Call the transaction object's setCustInfo() method to write the CustInfo object (with the item information to the transaction object.
Item mandatory values
Pre-Authorization with CVD & AVS
The Card Validation Digits (CVD) value refers to the numbers appearing on the back of the credit card rather than the numbers imprinted on the front. It is an optional fraud prevention tool that enables merchants to verify data provided by the cardholder at transaction time. This data is submitted along with the transaction to the issuing bank, which provides a response indicating whether the data is a match.
The response that is received from CVD verification is intended to provide added security and fraud prevention, but the response itself does not affect the completion of a transaction. Upon receiving a response, the choice whether to proceed with a transaction is left entirely to the merchant. The response is not a strict guideline of which transaction will approve or decline.
Address Verification Service (AVS) is an optional fraud-prevention tool offered by issuing banks whereby a cardholder's address is submitted as part of the transaction authorization. The AVS address is then compared to the address kept on file at the issuing bank. AVS checks whether the street number, street name and zip/postal code match. The issuing bank returns an AVS result code indicating whether the data was matched successfully. Regardless of the AVS result code returned, the credit card is authorized or declined by the issuing bank.
The response that is received from AVS verification is intended to provide added security and fraud prevention, but the response itself does not affect the completion of a transaction. Upon receiving a response, the choice to proceed with a transaction is left entirely to the merchant. The responses is not a strict guideline of whether a transaction will be approved or declined.
Things to consider:
- CVD is only supported by Visa, MasterCard, Discover, JCB, American Express and UnionPay.
- AVS is only supported by Visa, MasterCard, Discover and American Express.
- When testing CVD or AVS, you must only use the Visa test card numbers 4242424242424242 or 4005554444444403, and the amounts described in the Simulator eFraud Response Codes Table
- For a full list of possible AVS & CVD result codes refer to the CVD and AVS Result Code tables.
Security: The CVD value must only be passed to the payment gateway. Under no circumstances may it be stored for subsequent uses or displayed as part of the receipt information.
Note:Please be advised that CVD results will NOT be returned in the response for UnionPay.
package Canada;
import JavaAPI.*;
public class TestCanadaPreauthEfraud
{
public static void main(String[] args)
{
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String store_id = "store5";
String api_token = "yesguy";
String amount = "10.01";
String pan = "4242424242424242";
String expdate = "1902"; //YYMM format
String crypt = "7";
String processing_country_code = "CA";
boolean status_check = false;
AvsInfo avsCheck = new AvsInfo();
avsCheck.setAvsStreetNumber("212");
avsCheck.setAvsStreetName("Payton Street");
avsCheck.setAvsZipCode("M1M1M1");
avsCheck.setAvsEmail("test@host.com");
avsCheck.setAvsHostname("hostname");
avsCheck.setAvsBrowser("Mozilla");
avsCheck.setAvsShiptoCountry("CAN");
avsCheck.setAvsShipMethod("G");
avsCheck.setAvsMerchProdSku("123456");
avsCheck.setAvsCustIp("192.168.0.1");
avsCheck.setAvsCustPhone("5556667777");
CvdInfo cvdCheck = new CvdInfo();
cvdCheck.setCvdIndicator("1");
cvdCheck.setCvdValue("099");
PreAuth preauth = new PreAuth();
preauth.setOrderId(order_id);
preauth.setAmount(amount);
preauth.setPan(pan);
preauth.setExpdate(expdate);
preauth.setCryptType(crypt);
preauth.setAvsInfo(avsCheck);
preauth.setCvdInfo(cvdCheck);
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(preauth);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("ISO = " + receipt.getISO());
System.out.println("BankTotals = " + receipt.getBankTotals());
System.out.println("Message = " + receipt.getMessage());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("Ticket = " + receipt.getTicket());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("Avs Response = " + receipt.getAvsResultCode());
System.out.println("Cvd Response = " + receipt.getCvdResultCode());
System.out.println("ITD Response = " + receipt.getITDResponse());
System.out.println("IsVisaDebit = " + receipt.getIsVisaDebit());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Pre-Authorization - Transaction Values
PreAuth preauth = new PreAuth();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(preauth);
Pre-Authorization object mandatory values
Value
|
Type
|
Limits
|
Set method
|
Description
|
Order ID
|
String
|
50-character alphanumeric
|
preauth.setOrderId(order_id);
|
Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.
For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.
The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.
A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.
If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.
|
Amount
|
String
|
10-character decimal
|
preauth.setAmount(amount);
|
Transaction amount This must contain at least 3 digits, two of which are penny values.
The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed.
|
Credit card number
|
String
|
20-character numeric
|
preauth.setPan(pan);
|
Most credit card numbers today are 16 digits, but some 13-digit numbers are still accepted by some issuers. This field has been intentionally expanded to 20 digits in consideration for future expansion and potential support of private label card ranges.
|
Expiry date
|
String
|
4-character alphanumeric
YYMM format.
|
preauth.setExpdate(expdate);
|
Submit in YYMM format.
Note: This is the reverse of the date displayed on the physical card, which is MMYY.
|
E-Commerce indicator
|
String
|
1-character alphanumeric
|
preauth.setCryptType(crypt);
|
Describes the category of e-commerce transaction being processed. Allowable values are:
- 1 - Mail Order / Telephone Order—Single
- 2 - Mail Order / Telephone Order—Recurring
- 3 - Mail Order / Telephone Order—Instalment
- 4 - Mail Order / Telephone Order—Unknown classification
- 5 - Authenticated e-commerce transaction (VBV)
- 6 - Non-authenticated e-commerce transaction (VBV)
- 7 - SSL-enabled merchant
In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:
if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7
|
Pre-Authorization object optional values
Value
|
Type
|
Limits
|
Set method
|
Description
|
Dynamic descriptor |
String |
20-character alphanumeric |
preauth.setDynamicDescriptor(dynamic_descriptor); |
Merchant defined description sent on a per-transaction basis that will appear on the credit card statement. Dependent on the card Issuer, the statement will typically show the dynamic descriptor appended to the merchant's existing business name separated by the "/" character. Please note that the combined length of the merchant's business name, forward slash "/" character, and the dynamic descriptor may not exceed 22 characters.
-Example-
Existing Business Name: ABC Painting
Dynamic Descriptor: Booking 12345
Cardholder Statement Displays: ABC Painting/Booking 1
For Pre-Authorization transactions: the value in the dynamic descriptor field will only be carried over to a Pre-Authorization Completion when executing the latter via the Merchant Resource Center; otherwise, the value for dynamic descriptor must be sent again in the Pre-Authorization Completion.
|
Status Check
|
Boolean
|
true/false
|
mpgReq.setStatusCheck(status_check);
|
Status Check is a connection object value that allows merchants to verify whether a previously sent transaction was processed successfully. To submit a Status Check request, resend the original transaction with all the same parameter values, but set the status check value to either true or false. Once set to “true”, the gateway will check the status of a transaction that has an order_id that matches the one passed.
If the transaction is found, the gateway will respond with the specifics of that transaction.
If the transaction is not found, the gateway will respond with a not found message.
Once it is set to “false”, the transaction will process as a new transaction.
Things to consider:
The Status Check request should only be used once and immediately (within 2 minutes) after the last transaction that had failed.
Do not resend the Status Check request if it has timed out. Additional investigation is required.
|
Wallet Indicator
|
String
|
3-character alphanumeric
|
preauth.setWalletIndicator(wallet_indicator);
|
Available to Canada integrations only. This field is applicable to Visa Checkout and MasterCard MasterPass transactions whereby the merchant has integrated directly to the Visa/MC wallet to retrieve the card data and is now submitting it for processing. This is a mandatory field for these Visa Checkout and MasterCard MasterPass transactions.
Field is a case sensitive. Possible value:
- APP = Apple Pay In-app
- APW = Apple Pay On the Web
- GPP = Google Pay In-app
- GPW = Google Pay On the Web
- MMP = MasterCard MasterPass
- VCO = Visa Checkout
|
Customer Information
|
Object
|
N/A |
preauth.setCustInfo(customer); |
Refer below for further breakdown and definition. |
AVS
|
Object |
N/A |
preauth.setAvsInfo(avsCheck);
|
Refer below for further breakdown and definition. |
CVD
|
Object
|
N/A |
preauth.setCvdInfo(cvdCheck);
|
Refer below for further breakdown and definition. |
Customer ID
|
String |
50-character alphanumeric
|
preauth.setCustId(cust_id);
|
This can be used for policy number, membership number, student ID, invoice number.
This field is searchable from the Moneris Merchant Resource Centre. |
COF Info
|
Object
|
|
cof.setPaymentIndicator(PaymentIndicator);
cof.setPaymentInformation(PaymentInformation);
cof.setIssuerId(IssuerID);
|
Refer to Pre-authorization with Credential on File
|
CvdInfo object mandatory values
AvsInfo object mandatory values
CVD & AVS Response Fields
Pre-Authorization with 3-D Secure
The Pre-Authorization with 3-D Secure transaction follows a 3-D Secure MPI authentication. After receiving confirmation from the MPI ACS transaction, this Pre-Authorization verifies funds on the customer’s card, removes the funds and prepares them for deposit into the merchant’s account.
To perform the 3-D Secure authentication, the Moneris MPI or any 3rd party MPI may be used.
In addition to 3-D Secure transactions, this transaction can also be used to process Apple Pay and Google Pay™ transactions. This transaction is applicable only if choosing to integrate directly to Apple Wallet or Google Wallet (if not using the Moneris Apple Pay or Google Pay™ SDKs).
Refer to Apple or Google developer portals for details on integrating directly to their wallets to retrieve the payload data.
NOTE: Moneris strongly discourages the use of frames as part of a 3-D Secure implementation, and cannot guarantee their reliability when processing transactions in the production environment.
package Canada;
import JavaAPI.*;
public class TestCanadaCavvPreauth
{
public static void main(String[] args)
{
String store_id = "store5";
String api_token = "yesguy";
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String cust_id = "CUS887H67";
String amount = "10.42";
String pan = "4242424242424242";
String expdate = "1911"; //YYMM format
String cavv = "AAABBJg0VhI0VniQEjRWAAAAAAA=";
String processing_country_code = "CA";
String crypt_type = "5";
boolean status_check = false;
CavvPreAuth cavvPreauth = new CavvPreAuth();
cavvPreauth.setOrderId(order_id);
cavvPreauth.setCustId(cust_id);
cavvPreauth.setAmount(amount);
cavvPreauth.setPan(pan);
cavvPreauth.setExpdate(expdate);
cavvPreauth.setCavv(cavv);
cavvPreauth.setCryptType(crypt_type); //Mandatory for AMEX only
//cavvPreauth.setWalletIndicator("APP"); //set only for wallet transactions. e.g APPLE PAY
cavvPreauth.setCmId("8nAK8712sGaAkls56"); //set only for usage with Offlinx - Unique max 50 alphanumeric characters transaction id generated by merchant
//optional - Credential on File details
CofInfo cof = new CofInfo();
cof.setPaymentIndicator("U");
cof.setPaymentInformation("2");
cof.setIssuerId("139X3130ASCXAS9");
cavvPreauth.setCofInfo(cof);
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(cavvPreauth);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("ISO = " + receipt.getISO());
System.out.println("BankTotals = " + receipt.getBankTotals());
System.out.println("Message = " + receipt.getMessage());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("Ticket = " + receipt.getTicket());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("CavvResultCode = " + receipt.getCavvResultCode());
System.out.println("IssuerId = " + receipt.getIssuerId());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Pre-Authorization with 3-D Secure - Transaction
CavvPreAuth cavvPreauth = new CavvPreAuth();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(cavvPreauth);
Pre-Authorization with 3-D Secure object mandatory values
Pre-Authorization with 3-D Secure optional values
3-D Secure Response Fields
Pre-Authorization with Credential on File
When storing Customer’s credentials for use in future authorizations, or when using these credentials in subsequent transactions, card brands now require merchants to indicate this in the transaction request.
Things to consider:
- While the requirements for handling credential on file transactions relate to Visa, Mastercard and Discover only, in order to avoid confusion and prevent error, please implement these changes for all card types and the Moneris system will then correctly flow the relevant card data values as appropriate
- When initially storing cardholder credentials, please be sure to adhere to the following:
- Obtain the cardholder’s card verification digits(CVD).
- Issuer ID will be sent without value for the initial transaction.
- The payment information field will always be a value of 0.
- Include cardholder consent prior to cardholder data being stored.
- Financial transaction must be approved before storing.
Note:Credential on file transactions are available to Canada Integrations only.
package Canada;
import JavaAPI.*;
public class TestCanadaPreauth
{
public static void main(String[] args)
{
String store_id = "store5";
String api_token = "yesguy";
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String amount = "5.00";
String pan = "4242424242424242";
String expdate = "1902";
String crypt = "7";
String processing_country_code = "CA";
boolean status_check = false;
PreAuth preauth = new PreAuth();
preauth.setOrderId(order_id);
preauth.setAmount(amount);
preauth.setPan(pan);
preauth.setExpdate(expdate);
preauth.setCryptType(crypt);
//preauth.setWalletIndicator(""); //Refer documentation for possible values
//Optional - Set for Multi-Currency only
//setAmount must be 0.00 when using multi-currency
//preauth.setMCPAmount("500"); //penny value amount 1.25 = 125
//preauth.setMCPCurrencyCode("840"); //ISO-4217 country currency number
//optional - Credential on File details
CofInfo cof = new CofInfo();
cof.setPaymentIndicator("U");
cof.setPaymentInformation("2");
cof.setIssuerId("139X3130ASCXAS9");
preauth.setCofInfo(cof);
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(preauth);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("ISO = " + receipt.getISO());
System.out.println("BankTotals = " + receipt.getBankTotals());
System.out.println("Message = " + receipt.getMessage());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("Ticket = " + receipt.getTicket());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("IsVisaDebit = " + receipt.getIsVisaDebit());
//System.out.println("StatusCode = " + receipt.getStatusCode());
//System.out.println("StatusMessage = " + receipt.getStatusMessage());
System.out.println("MCPAmount = " + receipt.getMCPAmount());
System.out.println("MCPCurrencyCode = " + receipt.getMCPCurrencyCode());
System.out.println("IssuerId = " + receipt.getIssuerId());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Pre-Authorization - Transaction Values
PreAuth preauth = new PreAuth();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(preauth);
Pre-Authorization object mandatory values
Value
|
Type
|
Limits
|
Set method
|
Description
|
Order ID
|
String
|
50-character alphanumeric
|
preauth.setOrderId(order_id);
|
Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.
For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.
The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.
A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.
If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.
|
Amount
|
String
|
10-character decimal
|
preauth.setAmount(amount);
|
Transaction amount This must contain at least 3 digits, two of which are penny values.
The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed.
|
Credit card number
|
String
|
20-character numeric
|
preauth.setPan(pan);
|
Most credit card numbers today are 16 digits, but some 13-digit numbers are still accepted by some issuers. This field has been intentionally expanded to 20 digits in consideration for future expansion and potential support of private label card ranges.
|
Expiry date
|
String
|
4-character alphanumeric
YYMM format.
|
preauth.setExpdate(expdate);
|
Submit in YYMM format.
Note: This is the reverse of the date displayed on the physical card, which is MMYY.
|
E-Commerce indicator
|
String
|
1-character alphanumeric
|
preauth.setCryptType(crypt);
|
Describes the category of e-commerce transaction being processed. Allowable values are:
- 1 - Mail Order / Telephone Order—Single
- 2 - Mail Order / Telephone Order—Recurring (Variable)
- 3 - Mail Order / Telephone Order—Instalment
- 4 - Mail Order / Telephone Order—Unknown classification
- 5 - Authenticated e-commerce transaction (3-D Secure)
- 6 - Non-authenticated e-commerce transaction (3-D Secure)
- 7 - SSL-enabled merchant
In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:
if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
if payment indicator = V, then allowable values for e-commerce indicator: 2, 5 or 6
if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7
|
Pre-Authorization object optional values
Value
|
Type
|
Limits
|
Set method
|
Description
|
Dynamic descriptor |
String |
20-character alphanumeric |
preauth.setDynamicDescriptor(dynamic_descriptor); |
Merchant defined description sent on a per-transaction basis that will appear on the credit card statement. Dependent on the card Issuer, the statement will typically show the dynamic descriptor appended to the merchant's existing business name separated by the "/" character. Please note that the combined length of the merchant's business name, forward slash "/" character, and the dynamic descriptor may not exceed 22 characters.
-Example-
Existing Business Name: ABC Painting
Dynamic Descriptor: Booking 12345
Cardholder Statement Displays: ABC Painting/Booking 1
For Pre-Authorization transactions: the value in the dynamic descriptor field will only be carried over to a Pre-Authorization Completion when executing the latter via the Merchant Resource Center; otherwise, the value for dynamic descriptor must be sent again in the Pre-Authorization Completion.
|
Status Check
|
Boolean
|
true/false
|
mpgReq.setStatusCheck(status_check);
|
Status Check is a connection object value that allows merchants to verify whether a previously sent transaction was processed successfully. To submit a Status Check request, resend the original transaction with all the same parameter values, but set the status check value to either true or false. Once set to “true”, the gateway will check the status of a transaction that has an order_id that matches the one passed.
If the transaction is found, the gateway will respond with the specifics of that transaction.
If the transaction is not found, the gateway will respond with a not found message.
Once it is set to “false”, the transaction will process as a new transaction.
Things to consider:
The Status Check request should only be used once and immediately (within 2 minutes) after the last transaction that had failed.
Do not resend the Status Check request if it has timed out. Additional investigation is required.
|
Wallet Indicator
|
String
|
3-character alphanumeric
|
preauth.setWalletIndicator(wallet_indicator);
|
Available to Canada integrations only. This field is applicable to Visa Checkout and MasterCard MasterPass transactions whereby the merchant has integrated directly to the Visa/MC wallet to retrieve the card data and is now submitting it for processing. This is a mandatory field for these Visa Checkout and MasterCard MasterPass transactions.
Field is a case sensitive. Possible value:
- APP = Apple Pay In-app
- APW = Apple Pay On the Web
- GPP = Google Pay In-app
- GPW = Google Pay On the Web
- MMP = MasterCard MasterPass
- VCO = Visa Checkout
|
Customer Information
|
Object
|
N/A |
preauth.setCustInfo(customer); |
Refer below for further breakdown and definition. |
AVS
|
Object |
N/A |
preauth.setAvsInfo(avsCheck);
|
Refer below for further breakdown and definition. |
CVD
|
Object
|
N/A |
preauth.setCvdInfo(cvdCheck);
|
Refer below for further breakdown and definition. |
Customer ID
|
String |
50-character alphanumeric
|
preauth.setCustId(cust_id);
|
This can be used for policy number, membership number, student ID, invoice number.
This field is searchable from the Moneris Merchant Resource Centre.
|
COF Info
|
Object
|
|
cof.setPaymentIndicator(PaymentIndicator);
cof.setPaymentInformation(PaymentInformation);
cof.setIssuerId(IssuerID);
|
Refer below for further breakdown and definition.
For more information, see Definitions of Request Fields – Credential on File below.
|
purchase.setOrderId(order_id); |
Credential on File Info Object and Variables
The Credential on File Info object is nested within the request for the applicable transaction types.
Object:
Variables in the cof object:
- PaymentIndicator
- PaymentInformation
- IssuerID
Definitions of Request Fields – Credential on File
Pre-Authorization with Vault
This transaction uses the data key to identify a previously registered credit card profile. The details saved within the profile are then submitted to perform a Pre-Authorization transaction.
The data key may be a temporary one generated using Hosted Tokenization or it may be a permanent one from the Vault.
The Vault feature allows merchants to create long term customer profiles, edit those profiles, and use them to process transactions without having to enter financial information each time.
The only difference between charging a temporary token and charging a standard Vault token is whether the expiry date is sent. With the Vault token, the expiry date is stored along with the card number as part of the Vault profile. Therefore, there is no need to send the expiry date again with each normal Vault transaction.
However, a temporary token transaction may have only stored the card number. Therefore, in this scenario the expiry date must be sent when you charge the card.
package Canada;
import JavaAPI.*;
public class TestCanadaResPreauthCC
{
public static void main(String[] args)
{
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String store_id = "store5";
String api_token = "yesguy";
String data_key = "rS7DbroQHJmJxdBfXFXiauQc4";
String amount = "1.00";
String cust_id = "customer1"; //if sent will be submitted, otherwise cust_id from profile will be used
String crypt_type = "1";
String processing_country_code = "CA";
String expdate = "1712"; //For Temp Token
boolean status_check = false;
ResPreauthCC resPreauthCC = new ResPreauthCC();
resPreauthCC.setData(data_key);
resPreauthCC.setOrderId(order_id);
resPreauthCC.setCustId(cust_id);
resPreauthCC.setAmount(amount);
resPreauthCC.setCryptType(crypt_type);
//resPreauthCC.setExpDate(expdate); //Temp Tokens only
//Mandatory - Credential on File details
CofInfo cof = new CofInfo();
cof.setPaymentIndicator("U");
cof.setPaymentInformation("2");
cof.setIssuerId("139X3130ASCXAS9");
resPreauthCC.setCofInfo(cof);
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(resPreauthCC);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("DataKey = " + receipt.getDataKey());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Message = " + receipt.getMessage());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("ResSuccess = " + receipt.getResSuccess());
System.out.println("PaymentType = " + receipt.getPaymentType());
System.out.println("IsVisaDebit = " + receipt.getIsVisaDebit());
System.out.println("IsCorporate = " + receipt.getCorporateCard());
System.out.println("Cust ID = " + receipt.getResCustId());
System.out.println("Phone = " + receipt.getResPhone());
System.out.println("Email = " + receipt.getResEmail());
System.out.println("Note = " + receipt.getResNote());
System.out.println("Masked Pan = " + receipt.getResMaskedPan());
System.out.println("Exp Date = " + receipt.getResExpdate());
System.out.println("Crypt Type = " + receipt.getResCryptType());
System.out.println("Avs Street Number = " + receipt.getResAvsStreetNumber());
System.out.println("Avs Street Name = " + receipt.getResAvsStreetName());
System.out.println("Avs Zipcode = " + receipt.getResAvsZipcode());
System.out.println("IssuerId = " + receipt.getIssuerId());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Pre-Authorization with Vault - Transaction Values
ResPreauthCC resPreauthCC = new ResPreauthCC();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(resPreauthCC);
Pre-Authorization with Vault mandatory values
Pre-Authorization with Vault optional values
Vault Response Fields
Pre-Authorization with Vault and Customer Information
The Vault feature allows merchants to create customer profiles, edit those profiles, and use them to process
transactions without having to enter financial information each time.
The Vault is a complement to the recurring payment module. It securely stores customer account information
on Moneris secure servers. This allows merchants to bill customers for routine products or services
when an invoice is due.
An optional add-on to a number of transactions the Customer Information object. The Customer Information
object offers a number of fields to be submitted as part of the financial transaction, and stored by
Moneris. These details may be viewed in the future in the Merchant Resource Center.
package Canada;
import java.util.*;
import JavaAPI.*;
public class TestCanadaResPreauthCCCustInfo
{
public static void main(String[] args)
{
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String store_id = "store1";
String api_token = "yesguy";
String data_key = "v8iwTS0FbsSLg8dfSc54kONfw";
String amount = "1.00";
String cust_id = "customer1"; //if sent will be submitted, otherwise cust_id from profile will be used
String crypt_type = "1";
String processing_country_code = "CA";
boolean status_check = false;
ResPreauthCC resPreauthCC = new ResPreauthCC();
resPreauthCC.setData(data_key);
resPreauthCC.setOrderId(order_id);
resPreauthCC.setCustId(cust_id);
resPreauthCC.setAmount(amount);
resPreauthCC.setCryptType(crypt_type);
//CustInfo Variables
CustInfo custInfo = new CustInfo();
custInfo.setEmail("nick@widget.com");
custInfo.setInstructions("Make it fast!");
Hashtable<String, String> b = new Hashtable<String, String>();
b.put("first_name", "Bob");
b.put("last_name", "Smith");
b.put("company_name", "Widget Company Inc.");
b.put("address", "111 Bolts Ave.");
b.put("city", "Toronto");
b.put("province", "Ontario");
b.put("postal_code", "M8T 1T8");
b.put("country", "Canada");
b.put("phone", "416-555-5555");
b.put("fax", "416-555-5555");
b.put("tax1", "123.45"); //federal tax
b.put("tax2", "12.34"); //prov tax
b.put("tax3", "15.45"); //luxury tax
b.put("shipping_cost", "456.23"); //shipping cost
custInfo.setBilling(b);
/* OR you can pass the individual args.
custInfo.setBilling(
"Bob", //first name
"Smith", //last name
"Widget Company Inc.", //company name
"111 Bolts Ave.", //address
"Toronto", //city
"Ontario", //province
"M8T 1T8", //postal code
"Canada", //country
"416-555-5555", //phone
"416-555-5555", //fax
"123.45", //federal tax
"12.34", //prov tax
"15.45", //luxury tax
"456.23" //shipping cost
);
*/
Hashtable<String, String> s = new Hashtable<String, String>();
s.put("first_name", "Bob");
s.put("last_name", "Smith");
s.put("company_name", "Widget Company Inc.");
s.put("address", "111 Bolts Ave.");
s.put("city", "Toronto");
s.put("province", "Ontario");
s.put("postal_code", "M8T 1T8");
s.put("country", "Canada");
s.put("phone", "416-555-5555");
s.put("fax", "416-555-5555");
s.put("tax1", "123.45"); //federal tax
s.put("tax2", "12.34"); //prov tax
s.put("tax3", "15.45"); //luxury tax
s.put("shipping_cost", "456.23"); //shipping cost
custInfo.setShipping(s);
/* OR you can pass the individual args.
custInfo.setShipping(
"Bob", //first name
"Smith", //last name
"Widget Company Inc.", //company name
"111 Bolts Ave.", //address
"Toronto", //city
"Ontario", //province
"M8T 1T8", //postal code
"Canada", //country
"416-555-5555", //phone
"416-555-5555", //fax
"123.45", //federal tax
"12.34", //prov tax
"15.45", //luxury tax
"456.23" //shipping cost
);
*/
Hashtable<String, String> i1 = new Hashtable<String, String>();
i1.put("name", "item1's name");
i1.put("quantity", "5");
i1.put("product_code", "item1's product code");
i1.put("extended_amount", "1.01");
custInfo.setItem(i1);
/* OR you can pass the individual args.
custInfo.setItem(
"item1's name", //name
"5", //quantity
"item1's product code", //product code
"1.01" //extended amount
);
*/
Hashtable<String, String> i2 = new Hashtable<String, String>();
i2.put("name", "item2's name");
i2.put("quantity", "7");
i2.put("product_code", "item2's product code");
i2.put("extended_amount", "5.01");
custInfo.setItem(i2);
resPreauthCC.setCustInfo(custInfo);
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(resPreauthCC);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("DataKey = " + receipt.getDataKey());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Message = " + receipt.getMessage());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("ResSuccess = " + receipt.getResSuccess());
System.out.println("PaymentType = " + receipt.getPaymentType());
//ResolveData
System.out.println("Cust ID = " + receipt.getResCustId());
System.out.println("Phone = " + receipt.getResPhone());
System.out.println("Email = " + receipt.getResEmail());
System.out.println("Note = " + receipt.getResNote());
System.out.println("Masked Pan = " + receipt.getResMaskedPan());
System.out.println("Exp Date = " + receipt.getResExpdate());
System.out.println("Crypt Type = " + receipt.getResCryptType());
System.out.println("Avs Street Number = " + receipt.getResAvsStreetNumber());
System.out.println("Avs Street Name = " + receipt.getResAvsStreetName());
System.out.println("Avs Zipcode = " + receipt.getResAvsZipcode());
}
catch (Exception e)
{
e.printStackTrace();
}
}
} // end TestResPreauthCC-CustInfo
Pre-Authorization with Vault - Transaction Values
ResPreauthCC resPreauthCC = new ResPreauthCC();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(resPreauthCC);
Pre-Authorization with Vault mandatory values
VALUE
|
TYPE
|
LIMITS
|
SET METHOD
|
DESCRIPTION
|
Data Key
|
String
|
25-character alphanumeric
|
resPreauthCC.setData(data_key);
|
The data key is the token that points to a previously stored profile. Profile identifier that all future financial Vault transactions (that is, they occur after the profile was registered by a ResAddCC or ResTokenizeCC transaction) will use to associate with the saved information.
The data key is generated by Moneris, and is returned to the merchant (via the Receipt object) when the profile is first registered.
|
Order ID
|
String
|
50-character alphanumeric
|
resPreauthCC.setOrderId(order_id);
|
Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.
For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.
The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.
A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.
If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.
|
Amount
|
String
|
10-character decimal
|
resPreauthCC.setAmount(amount);
|
Transaction amount This must contain at least 3 digits, two of which are penny values.
The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed.
|
E-Commerce indicator
|
String
|
1-character alphanumeric
|
resPreauthCC.setCryptType(crypt);
|
Describes the category of e-commerce transaction being processed. Allowable values are:
- 1 - Mail Order / Telephone Order—Single
- 2 - Mail Order / Telephone Order—Recurring
- 3 - Mail Order / Telephone Order—Instalment
- 4 - Mail Order / Telephone Order—Unknown classification
- 5 - Authenticated e-commerce transaction (VBV)
- 6 - Non-authenticated e-commerce transaction (VBV)
- 7 - SSL-enabled merchant
In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:
if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7
|
Pre-Authorization with Vault optional values
CustInfo object mandatory properties
Setting Billing & Shipping using Set Methods
The billing information and the shipping information for a given CustInfo object are written by using the customer.setBilling() and customer.setShipping() methods respectively:
customer.setBilling(first_name, last_name, company_name, address, city, province, postal_code, country, phone, fax, tax1, tax2, tax3, shipping_cost);
customer.setShipping(first_name, last_name, company_name, address, city, province, postal_code, country, phone, fax, tax1, tax2, tax3, shipping_cost);
Both of these methods have the same set of mandatory arguments.
Setting Billing & Shipping using Hash Tables
Writing billing or shipping information using hash tables is done as follows:
- Instantiate a CustInfo object.
- Instantiate a Hashtable object. (The sample code uses a different hash table for billing and shipping for clarity purposes. However, the skillful developer can re-use the same one.)
- Build the hashtable using put methods with the hash table keys in the table below.
- Call the CustInfo object's setBilling()/setShipping() method to pass the hashtable information to the CustInfo object
- Call the transaction object's setCustInfo() method to write the CustInfo object (with the billing/shipping information to the transaction object.
Billing & Shipping mandatory values
Setting Items using Set Methods
All the item information in the table below is written to the CustInfo object in one instruction for a given item. Multiples items may be set. Such as:
customer.setItem(item_description, item_quantity, item_product_code, item_extended_amount);
Setting Items using Hash Tables
Writing item information using hash tables is done as follows:
- Instantiate a CustInfo object.
- Instantiate a Hashtable object. (The sample code uses a different hash table for each item for clarity purposes. However, the skillful developer can re-use the same one.)
- Build the hashtable using put methods with the hash table keys in the table below.
- Call the CustInfo object's setItem() method to pass the hashtable information to the CustInfo object
- Call the transaction object's setCustInfo() method to write the CustInfo object (with the item information to the transaction object.
Item mandatory values
Vault Response Fields
Pre-Authorization with Vault and CVD & AVS
This transaction uses the data key to identify a previously registered credit card profile. The details saved within the profile are then submitted to perform a Pre-Authorization transaction.
The data key may be a temporary one generated using Hosted Tokenization or it may be a permanent one from the Vault.
The Card Validation Digits (CVD) value refers to the numbers appearing on the back of the credit card rather than the numbers imprinted on the front. It is an optional fraud prevention tool that enables merchants to verify data provided by the cardholder at transaction time. This data is submitted along with the transaction to the issuing bank, which provides a response indicating whether the data is a match.
The response that is received from CVD verification is intended to provide added security and fraud prevention, but the response itself does not affect the completion of a transaction. Upon receiving a response, the choice whether to proceed with a transaction is left entirely to the merchant. The response is not a strict guideline of which transaction will approve or decline.
Address Verification Service (AVS) is an optional fraud-prevention tool offered by issuing banks whereby a cardholder's address is submitted as part of the transaction authorization. The AVS address is then compared to the address kept on file at the issuing bank. AVS checks whether the street number, street name and zip/postal code match. The issuing bank returns an AVS result code indicating whether the data was matched successfully. Regardless of the AVS result code returned, the credit card is authorized or declined by the issuing bank.
The response that is received from AVS verification is intended to provide added security and fraud prevention, but the response itself does not affect the completion of a transaction. Upon receiving a response, the choice to proceed with a transaction is left entirely to the merchant. The responses is not a strict guideline of whether a transaction will be approved or declined.
Things to consider:
- CVD is only supported by Visa, MasterCard, Discover, JCB, American Express and UnionPay.
- AVS is only supported by Visa, MasterCard, Discover and American Express.
- When testing CVD or AVS, you must only use the Visa test card numbers 4242424242424242 or 4005554444444403, and the amounts described in the Simulator eFraud Response Codes Table
- For a full list of possible AVS & CVD result codes refer to the CVD and AVS Result Code tables
Security:The CVD value must only be passed to the payment gateway. Under no circumstances may it be stored for subsequent uses or displayed as part of the receipt information.
Note:Please be advised that CVD results will NOT be returned in the response for UnionPay.
package Canada;
import JavaAPI.*;
public class TestCanadaResPreauthCCEfraud
{
public static void main(String[] args)
{
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String store_id = "store1";
String api_token = "yesguy";
String data_key = "eLqsADfwqHDxIpJG9vLnELx01";
String amount = "1.00";
String cust_id = "customer1"; //if sent will be submitted, otherwise cust_id from profile will be used
String crypt_type = "1";
String processing_country_code = "CA";
boolean status_check = false;
AvsInfo avsCheck = new AvsInfo();
avsCheck.setAvsStreetNumber("212");
avsCheck.setAvsStreetName("Payton Street");
avsCheck.setAvsZipCode("M1M1M1");
avsCheck.setAvsEmail("test@host.com");
avsCheck.setAvsHostname("hostname");
avsCheck.setAvsBrowser("Mozilla");
avsCheck.setAvsShiptoCountry("CAN");
avsCheck.setAvsShipMethod("G");
avsCheck.setAvsMerchProdSku("123456");
avsCheck.setAvsCustIp("192.168.0.1");
avsCheck.setAvsCustPhone("5556667777");
CvdInfo cvdCheck = new CvdInfo();
cvdCheck.setCvdIndicator("1");
cvdCheck.setCvdValue("099");
ResPreauthCC resPreauthCC = new ResPreauthCC();
resPreauthCC.setData(data_key);
resPreauthCC.setOrderId(order_id);
resPreauthCC.setCustId(cust_id);
resPreauthCC.setAmount(amount);
resPreauthCC.setCryptType(crypt_type);
resPreauthCC.setAvsInfo(avsCheck);
resPreauthCC.setCvdInfo(cvdCheck);
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(resPreauthCC);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("DataKey = " + receipt.getDataKey());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Message = " + receipt.getMessage());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("AVSResponse = " + receipt.getAvsResultCode());
System.out.println("CVDResponse = " + receipt.getCvdResultCode());
System.out.println("ITDResponse = " + receipt.getITDResponse());
System.out.println("ResSuccess = " + receipt.getResSuccess());
System.out.println("PaymentType = " + receipt.getPaymentType());
System.out.println("Cust ID = " + receipt.getResCustId());
System.out.println("Phone = " + receipt.getResPhone());
System.out.println("Email = " + receipt.getResEmail());
System.out.println("Note = " + receipt.getResNote());
System.out.println("Masked Pan = " + receipt.getResMaskedPan());
System.out.println("Exp Date = " + receipt.getResExpdate());
System.out.println("Crypt Type = " + receipt.getResCryptType());
System.out.println("Avs Street Number = " + receipt.getResAvsStreetNumber());
System.out.println("Avs Street Name = " + receipt.getResAvsStreetName());
System.out.println("Avs Zipcode = " + receipt.getResAvsZipcode());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Pre-Authorization with Vault - Transaction Values
ResPreauthCC resPreauthCC = new ResPreauthCC();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(resPreauthCC);
Pre-Authorization with Vault mandatory values
Pre-Authorization with Vault optional values
CvdInfo object mandatory values
AvsInfo object mandatory values
CVD & AVS Response Fields
Vault Response Fields
Pre-Authorization with Vault and 3-D Secure
This transaction uses the data key to identify a previously registered credit card profile. The details saved within the profile are then submitted to perform a Pre-Authorization transaction.
The Pre-Authorization with 3-D Secure transaction follows a 3-D Secure MPI authentication. After receiving confirmation from the MPI ACS transaction, this Pre-Authorization verifies funds on the customer’s card, removes the funds and prepares them for deposit into the merchant’s account.
To perform the 3-D Secure authentication, the Moneris MPI or any 3rd party MPI may be used.
In addition to 3-D Secure transactions, this transaction can also be used to process Apple Pay and Google Pay™ transactions. This transaction is applicable only if choosing to integrate directly to Apple Wallet or Google Wallet (if not using the Moneris Apple Pay or Google Pay™ SDKs).
Refer to Apple or Google developer portals for details on integrating directly to their wallets to retrieve the payload data.
NOTE: Moneris strongly discourages the use of frames as part of a 3-D Secure implementation, and cannot guarantee their reliability when processing transactions in the production environment.
package Canada;
import JavaAPI.*;
public class TestCanadaResCavvPreauthCC
{
public static void main(String[] args)
{
String store_id = "store1";
String api_token = "yesguy";
String data_key = "4INQR1A8ocxD0oafSz50LADXy";
java.util.Date createDate = new java.util.Date();
String order_id = "Test"+createDate.getTime();
String amount = "1.00";
String cust_id = "customer1"; //if sent will be submitted, otherwise cust_id from profile will be used
String cavv = "AAABBJg0VhI0VniQEjRWAAAAAAA";
String processing_country_code = "CA";
String expdate = "1901";
boolean status_check = false;
ResCavvPreauthCC resCavvPreauthCC = new ResCavvPreauthCC();
resCavvPreauthCC.setOrderId(order_id);
resCavvPreauthCC.setData(data_key);
resCavvPreauthCC.setCustId(cust_id);
resCavvPreauthCC.setAmount(amount);
resCavvPreauthCC.setCavv(cavv);
resCavvPreauthCC.setExpDate(expdate);
//Mandatory - Credential on File details
CofInfo cof = new CofInfo();
cof.setPaymentIndicator("U");
cof.setPaymentInformation("2");
cof.setIssuerId("139X3130ASCXAS9");
resCavvPreauthCC.setCofInfo(cof);
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setProcCountryCode(processing_country_code);
mpgReq.setTestMode(true); //false or comment out this line for production transactions
mpgReq.setStoreId(store_id);
mpgReq.setApiToken(api_token);
mpgReq.setTransaction(resCavvPreauthCC);
mpgReq.setStatusCheck(status_check);
mpgReq.send();
try
{
Receipt receipt = mpgReq.getReceipt();
System.out.println("DataKey = " + receipt.getDataKey());
System.out.println("ReceiptId = " + receipt.getReceiptId());
System.out.println("ReferenceNum = " + receipt.getReferenceNum());
System.out.println("ResponseCode = " + receipt.getResponseCode());
System.out.println("AuthCode = " + receipt.getAuthCode());
System.out.println("Message = " + receipt.getMessage());
System.out.println("TransDate = " + receipt.getTransDate());
System.out.println("TransTime = " + receipt.getTransTime());
System.out.println("TransType = " + receipt.getTransType());
System.out.println("Complete = " + receipt.getComplete());
System.out.println("TransAmount = " + receipt.getTransAmount());
System.out.println("CardType = " + receipt.getCardType());
System.out.println("TxnNumber = " + receipt.getTxnNumber());
System.out.println("TimedOut = " + receipt.getTimedOut());
System.out.println("ResSuccess = " + receipt.getResSuccess());
System.out.println("PaymentType = " + receipt.getPaymentType());
System.out.println("CavvResultCode = " + receipt.getCavvResultCode());
System.out.println("IssuerId = " + receipt.getIssuerId());
//ResolveData
System.out.println("Cust ID = " + receipt.getResCustId());
System.out.println("Phone = " + receipt.getResPhone());
System.out.println("Email = " + receipt.getResEmail());
System.out.println("Note = " + receipt.getResNote());
System.out.println("Masked Pan = " + receipt.getResMaskedPan());
System.out.println("Exp Date = " + receipt.getResExpdate());
System.out.println("Crypt Type = " + receipt.getResCryptType());
System.out.println("Avs Street Number = " + receipt.getResAvsStreetNumber());
System.out.println("Avs Street Name = " + receipt.getResAvsStreetName());
System.out.println("Avs Zipcode = " + receipt.getResAvsZipcode());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Pre-Authorization with Vault and 3-D Secure - Transaction Values
ResCavvPreauthCC resCavvPreauthCC = new ResCavvPreauthCC();
HttpsPostRequest mpgReq = new HttpsPostRequest();
mpgReq.setTransaction(resCavvPreauthCC);
Pre-Authorization with Vault and 3-D Secure mandatory values
Pre-Authorization with Vault and 3-D Secure optional values
3-D Secure Response Fields
Vault Response Fields